Servers are used in a variety of software environments. Each server-based application has its own workload characteristics. As a result, a server must be configured to achieve the best performance possible for a specific workload on specific hardware. One of the many configuration parameters that servers have is their multiprogramming level (MPL). The MPL is the concurrency level of the server. The concurrency level of the server is measured by how many server requests are handled concurrently.
Setting the MPL too high or too low can have an adverse effect on performance. A high MPL setting might cause increased contention on shared resources (e.g., “thrashing”) while a low MPL might limit the beneficial concurrency level of the server, thus needlessly reducing the amount of work a server can perform.
Current approaches to tuning server MPL do not adequately handle different types of situations. For example, server throughput may consistently increase as the MPL setting is increased, then appear to peak at a particular level. Traditional. MPL tuning algorithms would stay at that level, and assume that a peak allocation had been achieved. Real-life applications however, may have multiple peaks, and the point selected by a traditional tuning algorithm may not be the best level. In addition, because they typically take small, incremental steps, traditional algorithms may not reach an optimal level quickly.
Thus, what is needed are improved systems and methods for selecting a MPL level that addresses the challenges noted above.